const {readFileSync, writeFileSync} = require('fs')
const path = require('path')
const jwt = require('jsonwebtoken')
const alipaySdk = require('../../config/alipayConfig')
const moment = require('moment')

module.exports = {
    // 生成订单
    createOrder(ctx) {
        console.log('11',ctx)
        // 接收前端发送的数据
        const {goodsIds, username, product_code, totalPrice, nums} = ctx.request.body
        /*
            {
                "orderId": "订单号", √
                "username": "用户名", √
                "totalPrice": "总价", √
                "goods": [ √
                    {
                        "goods_id": 1,
                        "number": 2
                    },
                    {
                        "goods_id": 6,
                        "number": 5
                    }
                ],
                "product_code": "支付描述",
                "address": "地址",
                "name": "姓名",
                "phone": "电话"
            }
        */
        // goodsIds = '1,6,9,11'
        // nums = '2,5,8,11'
        let goods = goodsIds.split(',').map((item, index) => {
            let goods_id = item
            let number = nums.split(',')[index]
            return {
                goods_id,
                number
            }
        })
        // 生成订单号
        let orderId = Math.random().toString(36).substr(2, 10)
        // 将订单信息存储在数据库中
        let allOrders = JSON.parse(readFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), 'utf-8'))
        // console.log('订单信息',arrOrders)
        allOrders.push({
            orderId,
            goods,
            product_code,
            username,
            totalPrice,
            create_time: moment().format('YYYY-MM-DD HH:mm:ss'),
            status: 0,
        })
        // 将数据写入文件中
        writeFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), JSON.stringify(allOrders))
        ctx.body = {
            code: 0,
            msg: '订单生成成功！',
            data: {
                orderId: orderId
            }
        }
    },
    // 获取订单
    getOrder(ctx) {
        // 获取用户名
        let {id} = ctx.params
        // 获取所有订单
        let allOrders = JSON.parse(readFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), 'utf-8'))
        // 获取指定id的订单
        let order = allOrders.find(item => item.orderId === id)
        ctx.body = {
            code: 0,
            msg: '订单获取成功！',
            data: order
        }
    },
    // 获取支付地址，获取地址后，跳转到这个地址就能进行支付
    pay(ctx) {
        // 接收订单信息
        let {orderId, subject, totalPrice} = ctx.request.body
        const bizContent = {
            // 订单号
            out_trade_no: orderId,
            // 支付方式：电脑网站支付
            product_code: "FAST_INSTANT_TRADE_PAY",
            // 支付描述信息
            subject: subject,
            // body: "234",
            total_amount: totalPrice
          };
          
          // 支付页面接口，返回 HTML 代码片段，内容为 Form 表单
          const html = alipaySdk.pageExecute('alipay.trade.wap.pay', 'GET', {
            bizContent,
            // 支付成功后跳转的页面
            returnUrl: 'http://localhost:5173/'
        });
        ctx.body = {
            code: 0,
            msg: '正在支付中。。。',
            data: html
        }
    },
    // 获取所有订单
    getOrderList(ctx) {
        // 用户名获取到
        let {username} = ctx.params
        // 获取所有订单数据
        let allOrder = readFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), 'utf-8')
        // 转成数组
        allOrder = JSON.parse(allOrder)
        // 筛选出用户的订单数据
        let userOrderList = allOrder.filter(item => item.username === username)
        // 响应
        ctx.body = {
            code: 0,
            msg: '获取订单列表成功！',
            data: userOrderList
        }
    },
    // 获取支付状态，获取到状态后可以修改订单的状态
    async getPayStatus(ctx) {
        const {out_trade_no, trade_no} = ctx.request.body
        const result = await alipaySdk.exec("alipay.trade.query", {
            bizContent: {
                out_trade_no: out_trade_no,
                trade_no: trade_no,
            }
        })
        ctx.body = {
            code: 0,
            msg: '获取支付状态成功！',
            data: result
        }
    },
    // 将订单修改为支付成功
    paysuccess(ctx) {
        // 获取订单的id
        let {id} = ctx.params
        // 查询所有订单
        // 获取所有订单数据
        let allOrder = readFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), 'utf-8')
        // 转成数组
        allOrder = JSON.parse(allOrder)
        // 找到指定id的那一个订单数据
        let order = allOrder.find(item => item.orderId == id)
        // 修改状态
        order.status = 1
        // 将数据写入文件中
        writeFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), JSON.stringify(allOrder))
        // 响应
        ctx.body = {
            code: 0,
            msg: '修改成功！'
        }
    },
    // 删除订单
    delorder(ctx) {
        // 获取订单id
        let {id} = ctx.params
        // 获取所有订单数据
        let allOrder = readFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), 'utf-8')
        // 转成数组
        allOrder = JSON.parse(allOrder)
        // 根据id找下标
        let index = allOrder.findIndex(item => item.id === id)
        // 数组中删除这个元素
        allOrder.splice(index, 1)
        // 将删除后的数组写入文件
        writeFileSync(path.join(__dirname, '../', '../', 'database', 'order.json'), JSON.stringify(allOrder))
        // 响应
        ctx.body = {
            code: 0,
            msg: '删除成功！'
        }
    }
}